package com.zjl.学习.第03章_步骤Shop;

import org.springframework.batch.core.ExitStatus;
import org.springframework.batch.core.JobExecution;
import org.springframework.batch.core.StepContribution;
import org.springframework.batch.core.StepExecution;
import org.springframework.batch.core.configuration.annotation.StepBuilderFactory;
import org.springframework.batch.core.scope.context.ChunkContext;
import org.springframework.batch.core.scope.context.StepContext;
import org.springframework.batch.core.step.tasklet.Tasklet;
import org.springframework.batch.item.ExecutionContext;
import org.springframework.batch.repeat.RepeatStatus;
import org.springframework.beans.factory.annotation.Autowired;

import java.util.Map;

public class B1_简单Tasklet {

}
//自定义的 简单步骤
class MyTasklet implements Tasklet {

    /**
     *
     * @param stepContribution
     *      StepContribution：步骤信息对象，用于保存当前步骤执行情况信息，
     *      核心用法：设置步骤结果状态contribution.setExitStatus(ExitStatus status)
     * @param chunkContext
     *      ChunkContext：chuck上下文，跟之前学的StepContext JobContext一样，
     *      区别是它用于记录chunk块执行场景。通过它可以获取前面2个对象。
     * @return
     *      RepeatStatus.FINISHED;//已完成
     *      RepeatStatus.CONTINUABLE//继续执行本方法
     * @throws Exception
     */
    @Override
    public RepeatStatus execute(StepContribution stepContribution, ChunkContext chunkContext) throws Exception {
        /**
         * ExitStatus.UNKNOWN //未知，不知道的状态
         * ExitStatus.EXECUTING //执行
         *      表示处理时的连续状态仍在发生，因此不需要采取进一步行动。
         *      用于异步执行场景，其中处理发生在另一个线程或进程，调用者不需要等待结果
         * ExitStatus.COMPLETED //已完成的加工
         * ExitStatus.NOOP //表示没有处理的作业
         * ExitStatus.FAILED  //有误差的已完成处理。
         * ExitStatus.STOPPED  //表示已完成的加工 中断状态停止
         */
        stepContribution.setExitStatus(ExitStatus.STOPPED);//设置本步骤的状态
        //RepeatStatus.CONTINUABLE//继续，相当于递归执行
        return RepeatStatus.FINISHED;//已完成
    }
}
